package com.client;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import com.donnees.dao.*;
import com.metier.*;
import com.metier.logique.MSG;


/**
 * @name FenetrePrincipale
 * @description Fenêtre principale du programme, lancée via le threadApplication.
 * 				Gère tous les évènements sur cette fenêtre.
 * 				Construit l'ensemble de son contenu et instancie les objets nécessitants la récupération des données de la BDD.
 * @method FenetrePrincipale - Constructeur principal.
 * @method defineListeners - Définit les écouteurs de la classe pour les évènements de souris, clavier et de fenêtre.
 * @method defineWindowAttributes - Défini les attributs principaux de la fenêtre. (Nom, taille, etc.)
 * @method buildMainMenu - Construit le menu principal de la fenêtre.
 * @method buildContentWindow - Construit le menu principal de la fenêtre.
 * @method refreshTableOfContacts - Rafraîchit la Table contenant les personnes.
 * 
 * @author Ambroise
 * @since 07/03/2012
 */
public class FenetrePrincipale extends JFrame implements ActionListener, MouseListener, WindowListener, KeyListener{

	private static final long serialVersionUID = 1L;
	
	private DAOFactory fabrique;
	private AbstractDAO personDAO;
	
	private JMenuBar oJMenuBarPrincipal;
	
	private JMenu oJMenuFichier;
		private JMenuItem oJMenuFichierQuitter;
		
	private JMenu oJMenuAide;
		private JMenuItem oJMenuAideAPropos;

	/*
	 * Zone haut-gauche
	 * Menu de gestion des contacts
	 */
	private JPanel menuGestionContacts;
		private JLabel titreMenuGestionContact;
		private JButton listeContacts;
		private JButton ajouterContact;
		private JButton contacter;
	
	/*
	 * Zone bas-gauche
	 * Fonction rechercher
	 */
	private JPanel rechercheRapide;
		private JLabel titreRechercheRapide;
		private JTextField txtRechercherUnContact;
		private JLabel lblRechercheAvance;
		private JButton rechercherContact;
		
	/*
	 * Zone droite
	 * Informations sur les contacts
	 */
	private JPanel informationsContacts;
		private JScrollPane scrollTableContacts;
		private JTable tableContacts;
			private JButton tableContactsSupprimerContact;
			
	/*
	 * Objets relatifs à la fenêtre complète.
	 */
	private JSplitPane separateurHorizontal;
	private JSplitPane separateurVertical;
	
	
	/**
	 * @description Constructeur principal
	 */
	public FenetrePrincipale() {
		
		// On définit par qui sont récupérés les évènements.
		defineListeners();
		
		// On définit les éléments spécifiques à la fenêtre.
		defineWindowAttributes();
		
		// On construit le menu principal de la fenêtre.
		buildMainMenu();
		
		this.setVisible(true);
	}
	
	/**
	 * @name defineListeners
	 * @description Définit les écouteurs de la classe pour les évènements de souris, clavier et de fenêtre.
	 */
	public void defineListeners(){
		this.addWindowListener(this);
		this.addKeyListener(this);
		this.addMouseListener(this);
	}
	
	/**
	 * @name defineWindowAttributes
	 * @description Défini les attributs principaux de la fenêtre. (Nom, taille, etc.)
	 */
	public void defineWindowAttributes(){
		// On définit le titre de la fenêtre.
		this.setTitle("Non défini");

		// On met en plein écran.
		this.setExtendedState(this.getExtendedState() | JFrame.MAXIMIZED_BOTH);
		
        this.setLocationRelativeTo(null);
        
        // On définit une taille de base. (La fenêtre sera automatiquement agrandie par la suite)
        this.setSize(800, 600);
        this.setMinimumSize(new Dimension(800, 600));
        this.setPreferredSize(new Dimension(800, 600));
        
        // Le bouton fermer quitte le processus.
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // On défini la position de la fenêtre si elle est rétrécie. Au centre de l'écran. À peu près.
        this.setLocation((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth()/4, (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()/4);
	}
	
	/**
	 * @name buildMainMenu
	 * @description Construit le menu principal de la fenêtre.
	 */
	public void buildMainMenu(){
		// On construit le menu principal.
		this.oJMenuBarPrincipal = new JMenuBar();
		        
        // Menu déroulant de gestion des contacts
        this.oJMenuFichier = new JMenu("Fichier");
        
        // Quitter
        this.oJMenuFichierQuitter = new JMenuItem("Quitter");
        this.oJMenuFichierQuitter.addActionListener(this);
        this.oJMenuFichier.add(this.oJMenuFichierQuitter);
        
        // Ajout du menu au menu principal.
        this.oJMenuBarPrincipal.add(this.oJMenuFichier);
          
    	
	    // Menu déroulante de l'aide.
    	this.oJMenuAide = new JMenu("Aide");
    	
        // À propos
        this.oJMenuAideAPropos = new JMenuItem("À propos");
        this.oJMenuAideAPropos.addActionListener(this);
        this.oJMenuAide.add(this.oJMenuAideAPropos);
        
        // Ajout du menu au menu principal.
        this.oJMenuBarPrincipal.add(this.oJMenuAide);
	    
        // On définit notre MenuBarPrincipal comme MenuBar de la fenêtre principale.
		this.setJMenuBar(this.oJMenuBarPrincipal);
	}

	/**
	 * @name buildContentWindow
	 * @description Construit le contenu de la fenêtre, les éléments, etc.
	 * @param MSG personnes
	 */
	public void buildContentWindow(MSG personnes){
		
	}

	/*
	 * ************************************************************************************************************
	 * ************************************** Gestion des évènements **********************************************
	 * ************************************************************************************************************
	 */
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowOpened(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosing(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosed(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowIconified(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowDeiconified(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowActivated(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowDeactivated(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		Object source = e.getSource();
		
	
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Object source = e.getSource();
		
		
		
	}
}
